#include "BlockQueue.hpp"
#include <cstdio>
int num = 10;

void *consumer(void *args)
{
    // 从队列里拿数据
    while (true)
    {
        kzz::BlockQueue<int> *bq = static_cast<kzz::BlockQueue<int> *>(args);
        int data = bq->Pop();
        printf("拿到数据：%d\n", data);
    }
}
void *productor(void *args)
{
    // 生产数据放入队列
    while (true)
    {
        kzz::BlockQueue<int> *bq = static_cast<kzz::BlockQueue<int> *>(args);
        int data = 10;
        bq->Equeue(data);
        printf("生产数据: %d\n",data);
    }
}

int main()
{

    kzz::BlockQueue<int> _bq;

    pthread_t c_td1, c_td2, c_td3;
    pthread_create(&c_td1, nullptr, consumer, (void *)&_bq);
    pthread_create(&c_td2, nullptr, consumer, (void *)&_bq);
    pthread_create(&c_td3, nullptr, consumer, (void *)&_bq);

    pthread_t p_td1, p_td2;
    pthread_create(&p_td1, nullptr, productor, (void *)&_bq);
    pthread_create(&p_td2, nullptr, productor, (void *)&_bq);

    //必须要join，要不然main函数退出，消息队列回收了，子线程就会访问野指针

    pthread_join(c_td1,nullptr);
    pthread_join(c_td2,nullptr);
    pthread_join(c_td3,nullptr);
    pthread_join(p_td1,nullptr);
    pthread_join(p_td2,nullptr);

    return 0;
}